// AUTOR = 48668243; Sempere Sánchez, Àngel David

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;

/**
 *
 * @author sempere
 */
public class plp0 {


    /**
     * @param args the command line arguments
     */
    public static RandomAccessFile arxiu;
    public static ArrayList<Nodo> A;
    public static ArrayList<Nodo> B;

    public static class Nodo {

        int tipo = 0; //0 atomo, 1 cadena
        int valor = 0;
        String cadena = "";

        public Nodo(int lectura) {
            valor = lectura;
        }

        public void aCadena(String nuevaCadena) {
            tipo = 1;
            cadena = nuevaCadena;
        }

        public boolean esCadena(){
            return tipo ==1;
        }

        @Override
        public String toString(){
            return tipo + " " + (char) valor + " " + cadena;
        }
    }

    public static boolean carrega(String ruta) throws FileNotFoundException {
        arxiu = new RandomAccessFile(ruta, "r");
        A = new ArrayList<Nodo>();
        B = new ArrayList<Nodo>();
        return (arxiu != null);
    }

    public static int llig() {
        int i = -1;
        try {
            i = arxiu.read();
            if (i == (int) '=') {
                i = -2;
            } else if (i == (int) '\n') {
                i = -3;
            } else if (i==-1){
       // int melon;
        boolean continua = true;
        //char melon;
         }
        } catch (IOException ex) {
            //    Logger.getLogger(analizadorLexico.class.getName()).log(Level.SEVERE, null, ex);
        }
        return (i);
    }

    public static boolean mayorPrecedencia(int water, int melon) {
        if((water == (int)'*' || water == (int)'/') && (melon == (int)'+'|| melon == (int)'-')){
            return true;
        } else {
            return false;
        }
    }

    private static String traduce(Nodo A1) {
        if(A1.esCadena()){
            return A1.cadena;
        } else {
            if(A1.valor>=(int)'0'&& A1.valor<=(int)'9'){
                return Integer.toString(A1.valor-(int)'0');

            } else {
                if(A1.valor == (int)'+'){
                    return "suma";
                } else if (A1.valor == (int)'-'){
                    return "resta";
                } else if (A1.valor == (int)'*'){
                    return "prod";
                } else if (A1.valor == (int)'/'){
                    return "div";
                }
            }
        }
        return "PERILL " + A1.cadena + " " + A1.valor + " " +A1.tipo;
    }

    public static void main(String[] args) throws FileNotFoundException {
        // TODO code application logic here
        int water;
       // int melon;
        boolean continua = true;
        //char melon;

        //String temp ="/home/sempere/NetBeansProjects/pl/src/pl/newfile";
        carrega(args[0]);
        //carrega (temp);
        water = llig();
        do{
            continua = true;
            if (water >= 0) {
                if (water >= (int) '0' && water <= (int) '9') {
                    A.add(0, new Nodo(water));
                } else {
                    while (continua) {
                        continua = false;
                        if (B.isEmpty()) {
                            B.add(0, new Nodo(water));
                        } else {
                            int melon = B.get(0).valor;
                            if (mayorPrecedencia(water, melon)) {
                                B.add(0, new Nodo(water));
                            } else {
                                Nodo A1, A2, Y;
                                String traduccion = new String();
                                A2 = A.get(0);
                                A.remove(0);
                                A1 = A.get(0);
                                A.remove(0);
                                Y = B.get(0);
                                traduccion = traduce(Y) + "(" + traduce(A1) + "," + traduce(A2) + ")";
                                Y.aCadena(traduccion);
                                A.add(0, Y);
                                B.remove(0);
                                continua = true;
                            }
                        }
                    }
                }
            } else if (water == -2) {
                while (!(B.isEmpty())) {
                    Nodo N = new Nodo(0);
                    N.aCadena(traduce(B.get(0)) + "(" +traduce(A.get(1)) + "," + traduce(A.get(0)) + ")");
                    B.remove(0);
                    A.remove(0);
                    A.remove(0);
                    A.add(0, N);

                    //Originalmente en water==-3, problemas con \n
                }
                System.out.println(A.get(0).cadena);
                A.clear();
                B.clear();
            } else if (water == -3) {
                continua = true;

            }
            water = llig();
        }
        while (water!= -1);
    }
}